/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xos_http.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../helper_objs/head.h"
#include "../data_struct/head.h"
#include "../impl/head.h"
#include "../msg/head.h"
#include "notify_main.h"

namespace xos_http
{

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    notify_main::notify_main()
    {
    }

    notify_main::~notify_main()
    {
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // 
    // proc
    // 
    int notify_main::proc( xos_box::i_msg *& pMsg )
    {
        int ret = 1;

        int nMsg = pMsg->get_msg();

        switch( nMsg )
        {
            case net::NET_START:
            {
                helper_main::get()->notify( pMsg, MAIN_STARTING );
            }
            break;
            case net::NET_STOP:
            {
                helper_main::get()->notify( pMsg, MAIN_STOPPING );
            }
            break;
            case net::NET_HEART:
            {
                helper_main::get()->notify( pMsg, MAIN_HEART );
            }
            break;
            // 
            // release connect
            // 
            case net::NET_RELEASE_CONNECT:
            {
                on_release( pMsg );
            }
            break;

            default:
            {
                ret = 0;
            }
            break;
        }

        return ret;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    // bool[0]      : if success
    // 
    // msg[0]       : msg type
    // 
    // void[0]      : xos_http::connection*
    // 
    // 这是tcp和udp公用的释放回调方法
    // 

    int notify_main::on_release( xos_box::i_msg *& pMsg )
    {
        int ret = 0;

        net::i_connect * pNetConnect = (net::i_connect *)pMsg->get_void( 0, 0 );
        connection * pConnect = (connection *)pNetConnect->get_user_data();

        // 先释放自己的节点
        {
            xos_stl::release_interface( pConnect );
        }
        // 再告诉xos_net，本模块已经完成释放了
        // xos_net可以进行释放了
        {
            helper_net_callback::get()->notify( pMsg );
        }

        return ret;
    }

} // xos_http
